package infixupn;

public class Queue{
  private Knoten head;
  private Knoten tail;

  public Queue(){
    head=null;
    tail=null;
  }

  public boolean empty(){ return head==null; }

  public boolean numberNext(){ return !empty() && head.hasZahl(); }

  public void put(double zahl){
    Knoten neu=new Knoten(zahl);
    if(empty()) head=neu;
    else tail.next=neu;
    tail=neu;
  }

  public void put(String text){
    Knoten neu=new Knoten(text);
    if(empty()) head=neu;
    else tail.next=neu;
    tail=neu;
  }

  public double takeDouble() throws KeineZahlException{
    if(!numberNext()) throw new KeineZahlException();
    double wert=head.zahl;
    head=head.next;
    return wert;
  }

  public String takeString() throws KeinStringException{
    if(empty() || numberNext()) throw new KeinStringException();
    String wert=head.text;
    head=head.next;
    return wert;
  }

  // Die folgende Methode muss nicht verstanden werden
  public String toString(){
    StringBuilder sb=new StringBuilder();
    Knoten lauf=head;
    while(lauf!=null){
      if(lauf.hasZahl()) sb.append(lauf.zahl);
      else sb.append(lauf.text);
      sb.append(" ");
      lauf=lauf.next;
    }
    return sb.toString();
  }
}
